package com.qiangesoft.mybatisplus.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.nio.file.Paths;
import java.util.Collections;

/**
 * 代码生成器
 *
 * @author qiangesoft
 * @since 2024-07-29
 */
public class SimpleCodeGenerator {

    public static void main(String[] args) {
        // 项目根路径，如果是多模块，后面加上模块名称
        String path = Paths.get(System.getProperty("user.dir")).toString();

        FastAutoGenerator
                // 数据库连接信息（必须）
                .create("jdbc:mysql://127.0.0.1:3306/ozo_cloud?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false",
                        "root", "root")
                // 全局配置（必须）
                .globalConfig(builder -> builder
                        .author("qiangesoft") // 作者
//                        .enableSwagger() // 开启swagger模式
                        .outputDir(path + "/src/main/java") // 输出目录
                        .disableOpenDir() // 禁止打开
                )
                // 数据源配置（可选）
//                .dataSourceConfig(builder -> builder
//                        .schema("test") // 模式名称，部分数据库适用如ORACLE
//                )
                // 包配置（必须）
                .packageConfig(builder -> builder
                        .parent("com.qiangesoft.demo") // 设置包路径
//                        .moduleName("system") // 设置父包模块名
                        .entity("entity")
                        .mapper("mapper")
                        .service("service")
                        .serviceImpl("service.impl")
                        .pathInfo(Collections.singletonMap(OutputFile.xml, path + "/src/main/resources/mapper")) // 设置mapperXml生成路径
                )
                // 策略配置（可选）
                .strategyConfig(builder -> builder
                        .addInclude("sys_user", "sys_role") // 设置需要生成的表名
//                        .addTablePrefix("sys_") // 设置过滤表前缀
                        // entity配置
                        .entityBuilder()
                        .enableLombok() // lombok风格
                        // controller配置
                        .controllerBuilder()
                        .enableRestStyle() // 启用REST风格
                )
                // 模板引擎（可选）
                .templateEngine(new VelocityTemplateEngine())
                // 执行
                .execute();
    }
}
